"""
Author: LYh
Description: OK
"""
import edge_tts, asyncio, os
from datetime import datetime
import pygame


async def text_to_audio(text, output_file, rate = '+15%', volume = '+50%'):
    """
    Args:
        text:
        output_file:
        rate: 音速调整：带+或-号，注意：0%必须写为+0%
        volume: 音调调整：带+或-号，注意：0%必须写为+0%
    """
    # 以下是可选的声音：选择一个即可
    voice_list = ['zh-CN-XiaoxiaoNeural', 'zh-CN-XiaoyiNeural', 'zh-CN-YunjianNeural', 'zh-CN-YunxiNeural',
                  'zh-CN-YunxiaNeural', 'zh-CN-YunyangNeural']

    tts = edge_tts.Communicate(text=text, voice=voice_list[0], rate=rate, volume=volume)
    await tts.save(output_file)

def play_mp3(text, file_path=None):
    """
    播放指定路径的MP3音频文件，并在播放结束后退出程序。
    :param file_path: 音频文件的本地路径（字符串）,不输入则不保存到本地
    """
    if file_path is not None and not os.path.exists(file_path):
        asyncio.run(text_to_audio(text, output_file=file_path))
    elif file_path is None:
        file_path = f'../detect_history/temp-{datetime.now().strftime("%Y%m%d_%H%M%S")}.mp3'
        asyncio.run(text_to_audio(text, output_file=file_path))

    # 初始化 pygame mixer
    pygame.mixer.init()

    # 加载 MP3 文件
    pygame.mixer.music.load(file_path)
    pygame.mixer.music.play()

    # 保持播放直到文件结束
    while pygame.mixer.music.get_busy():
        pygame.time.Clock().tick(10)

    # 停止音乐播放，并清理资源
    pygame.mixer.music.stop()
    pygame.mixer.quit()

    if 'temp' in file_path:
        os.remove(file_path)

def ask_question():
    dialog = [
        '问题1：您的咳嗽是干咳还是有痰？如果有的话，痰的颜色是什么样的？',
        '问题2：这些症状是否有逐渐加重或有所缓解？',
        '问题3：请问您是否有测量过体温？是否有其他症状，比如头痛、乏力或是呼吸困难？',
        '问题4：您最近是否有吸烟、饮酒?',
    ]

    print('bot：接下来我将提问您一些问题：')
    play_mp3(text='接下来我将提问您一些问题。', file_path='../detect_history/Q0.mp3')
    for i in range(len(dialog)):
        question = dialog[i][4:]

        print('bot：' + question)
        play_mp3(text=question, file_path=f'../detect_history/Q{i+1}.mp3')
        dialog[i] += '\n回答：' + input('回答：')
    return dialog


if not os.path.exists('../detect_history/'):
    os.mkdir('../detect_history')


if __name__ == '__main__':
    ask_question()